public class 生成器模式 {
    public static void main(String[] args) {
        // 使用具体生成器构建运动型汽车
        CarBuilder sportsCarBuilder = new SportsCarBuilder();
        // 使用指挥者来控制构建过程
        CarDirector director = new CarDirector(sportsCarBuilder);
        // 指挥者构建完成汽车
        Car sportsCar = director.construct();
        // 输出构建好的汽车信息
        System.out.println(sportsCar);

        // 使用具体生成器构建家庭型汽车
        CarBuilder familyCarBuilder = new FamilyCarBuilder();
        // 使用指挥者来控制构建过程
        director = new CarDirector(familyCarBuilder);
        // 指挥者构建完成汽车
        Car familyCar = director.construct();
        // 输出构建好的汽车信息
        System.out.println(familyCar);
    }
}
//具体产品
 class Car {
    private String engine;  // 汽车的发动机
    private String wheels;  // 汽车的轮胎
    private String doors;   // 汽车的车门

    // 设置发动机
    public void setEngine(String engine) {
        this.engine = engine;
    }

    // 设置轮胎
    public void setWheels(String wheels) {
        this.wheels = wheels;
    }

    // 设置车门
    public void setDoors(String doors) {
        this.doors = doors;
    }

    // 返回汽车的详细信息
    @Override
    public String toString() {
        return "Car [engine=" + engine + ", wheels=" + wheels + ", doors=" + doors + "]";
    }
}
//生成器接口
 interface CarBuilder {
    void buildEngine();   // 建造发动机
    void buildWheels();   // 建造轮胎
    void buildDoors();    // 建造车门
    Car getCar();         // 获取最终建好的汽车
}

// 具体生成器：构建运动型汽车
 class SportsCarBuilder implements CarBuilder {
    private Car car;  // 创建一个新的汽车实例

    // 构造函数初始化汽车实例
    public SportsCarBuilder() {
        this.car = new Car();
    }

    @Override
    public void buildEngine() {
        // 为运动型汽车构建特殊的发动机
        car.setEngine("Sports Engine");
    }

    @Override
    public void buildWheels() {
        // 为运动型汽车设置运动轮胎
        car.setWheels("Sports Wheels");
    }

    @Override
    public void buildDoors() {
        // 为运动型汽车设置两扇门
        car.setDoors("2 Doors");
    }

    @Override
    public Car getCar() {
        // 返回构建完成的汽车
        return car;
    }
}

// 具体生成器：构建家庭型汽车
 class FamilyCarBuilder implements CarBuilder {
    private Car car;  // 创建一个新的汽车实例

    // 构造函数初始化汽车实例
    public FamilyCarBuilder() {
        this.car = new Car();
    }

    @Override
    public void buildEngine() {
        // 为家庭型汽车构建普通的发动机
        car.setEngine("Family Engine");
    }

    @Override
    public void buildWheels() {
        // 为家庭型汽车设置普通轮胎
        car.setWheels("Standard Wheels");
    }

    @Override
    public void buildDoors() {
        // 为家庭型汽车设置四扇门
        car.setDoors("4 Doors");
    }

    @Override
    public Car getCar() {
        // 返回构建完成的汽车
        return car;
    }
}

// 指挥者类负责控制产品构建的流程
 class CarDirector {
    private CarBuilder builder;  // 持有一个生成器实例

    // 构造函数接收生成器对象
    public CarDirector(CarBuilder builder) {
        this.builder = builder;
    }

    // 指挥者控制产品构建的过程
    public Car construct() {
        builder.buildEngine();  // 第一步：构建发动机
        builder.buildWheels();  // 第二步：构建轮胎
        builder.buildDoors();   // 第三步：构建车门
        return builder.getCar();  // 返回最终构建的汽车
    }
}